﻿#region using

using System;
using System.Collections.Generic;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

#endregion

namespace JupiterLibrary
{
    /// <summary>
    /// Scene se encarga de gestionar todos los elementos que conforman la escena. 
    /// </summary>
    public class Scene
    {
        /// <summary>
        /// Este es el nodo raíz. Este nodo no tiene ningún elemento renderizable asignado
        /// </summary>
        public Node RootNode;

        public Collision Collision;

        public SkyDome SkyDome;

        public List<Gizmo> Gizmos;

        public Scene()
        {
            RootNode = new Node(null);

            Collision = new Collision();
        }

        public Node CreateNode(IRenderObject renderobject,Node parentNode=null)
        {
            if (parentNode == null) parentNode = RootNode;

            Node node = new Node(parentNode);

            node.RenderObject = renderobject;

            return node;
        }

        /// <summary>
        /// Actualiza los elementos de la escena
        /// </summary>
        public void Update()
        {
            RootNode.Update();
        }

        /// <summary>
        /// Dibuja todos los elementos de la escena
        /// </summary>
        public void Draw()
        {
            Gizmos = new List<Gizmo>();

            RootNode.Draw();

            if (SkyDome != null)
                SkyDome.Draw();
        }
    }
}
